package com.example.propertymanagement.service;

import com.example.propertymanagement.entity.ParkingSpace;
import com.example.propertymanagement.entity.ParkingSpaceUsage;
import com.example.propertymanagement.repository.ParkingSpaceRepository;
import com.example.propertymanagement.repository.ParkingSpaceUsageRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.List;

@Service  // Spring 的 Service 注解，表示这是服务层组件
public class ParkingSpaceService {

    @Autowired
    private ParkingSpaceRepository parkingSpaceRepository;  // 注入 ParkingSpaceRepository，用于查询和保存停车位数据

    @Autowired
    private ParkingSpaceUsageRepository parkingSpaceUsageRepository;  // 注入 ParkingSpaceUsageRepository，用于查询和保存停车位使用记录数据

    // 获取某小区下的所有停车位
    public List<ParkingSpace> getAllParkingSpacesByCommunity(Integer communityId) {
        return parkingSpaceRepository.findByCommunityId(communityId);  // 根据小区ID查找停车位
    }

    // 通过车位编号查找停车位
    public ParkingSpace getParkingSpaceByCode(String spaceCode) {
        return parkingSpaceRepository.findBySpaceCode(spaceCode);  // 根据车位编号查找停车位
    }

    // 分配停车位
    public ParkingSpaceUsage assignParkingSpace(Integer spaceId, String plateNumber, String vehicleOwner, String contactPhone, Integer usageType, Double totalFee, Date startTime, Date endTime) {
        ParkingSpace parkingSpace = parkingSpaceRepository.findById(spaceId).orElse(null);  // 根据车位ID查找停车位
        if (parkingSpace == null || parkingSpace.getStatus() == 0) {  // 判断停车位是否存在或是否禁用
            throw new RuntimeException("停车位不可用或不存在");  // 如果停车位不可用，抛出异常
        }

        // 创建新的停车位使用记录
        ParkingSpaceUsage usage = new ParkingSpaceUsage();
        usage.setParkingSpace(parkingSpace);  // 设置停车位
        usage.setPlateNumber(plateNumber);  // 设置车牌号
        usage.setVehicleOwner(vehicleOwner);  // 设置车辆所有人
        usage.setContactPhone(contactPhone);  // 设置联系方式
        usage.setUsageType(usageType);  // 设置使用类型（固定或临时）
        usage.setTotalFee(totalFee);  // 设置停车费用
        usage.setStartTime(startTime);  // 设置停车开始时间
        usage.setEndTime(endTime);  // 设置停车结束时间
        usage.setCreateTime(new Date());  // 设置创建时间
        return parkingSpaceUsageRepository.save(usage);  // 保存停车位使用记录
    }

    // 获取某小区的停车位使用记录
    public List<ParkingSpaceUsage> getParkingSpaceUsageByCommunity(Integer communityId) {
        return parkingSpaceUsageRepository.findByCommunityId(communityId);  // 根据小区ID查找停车位使用记录
    }
}